package edu.kit.los;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

import org.apache.commons.lang3.StringEscapeUtils;



/**
 * @author Felix Kiechle, Benedikt Fuss  AIFB@BKIT
 * 
 * Hilfsklasse zur Bearbeitung von Strings und Lookup auf eine URL
 */
public class Utils {

	/**
	 * verkürzt einen übergebenen String auf eine anzugebende Länge und f�gt 3
	 * Punkte am Ende hinzug 
	 * @param str zu kürzender String
	 * @param length gewnschte Länge (exklusive ...). Wird keine Länge angegeben,
	 * so wird der String auf eine standardmäßige Länge gekürzt.
	 * @return gekürzten String (falls länger als Wunschlänge)
	 */
	public static String kuerzen(String str, int length) {
		// Wenn String null, abbrechen
		if (str == null)
			return null;
		// Standardwert für die Länge
		if (length == 0)
			length = 150;
		// falls schon kurz genug, Ursprungsstring zur�ckgeben
		if (str.length() < length)
			return str;
		// gekürzter String mit ...
		else
			return str.substring(0, length - 1) + " ...";
	}
	
	/**
	 * öffnendes XML-Tag
	 * @param s Name des Tags
	 * @return <s>
	 */
	public static String xmlOpen(String s){
		return "<"+s+">\n";
	}
	/**
	 * schließendes XML-Tag
	 * @param s Name des Tags
	 * @return </s>
	 */
	public static String xmlClose(String s){
		return "</"+s+">\n";
	}
	/**
	 * erstellt ein XML-Tag der Form <name>content</name>
	 * Dabei wird der Content automatisch nach XML encodiert
	 * @param name
	 * @param content
	 * @return <name>content</name>
	 */
	public static String xmlElement(String s){
		return StringEscapeUtils.escapeXml(s) + "\n";
	}
	
	/**
	 * Führt einen Lookup durch und gibt dieses als String zurück
	 * 
	 * @param URL
	 * @return Lookup als String
	 * @throws IOException
	 */
	public static String lookup_event_String(URL url) throws IOException,
			java.net.SocketTimeoutException {
		// HTTP-Connection öffnen
		HttpURLConnection conn = (HttpURLConnection) url.openConnection();
		// conn.addRequestProperty("accept", "text/turtle");
		// der Aufruf f�r RDF in Turtle
		InputStream is = conn.getInputStream();
		// Encoding festlegen
		String encoding = conn.getContentEncoding();
		if (encoding == null) {
			encoding = "ISO-8859-1";
		}
		// Datei einlesen
		BufferedReader in = new BufferedReader(new InputStreamReader(is,
				encoding));
		String l;
		StringBuilder sb = new StringBuilder();
		while ((l = in.readLine()) != null) {
			sb.append(l);
			sb.append('\n');
		}
		in.close();
		return sb.toString();
	}
}
